#ifndef SORT_HEADER
#define SORT_HEADER
/*
	Algorithms:
		Sort_Quick - 	Very quick algorithm, however
								worst case is slower than heap
								sort's worst case.
		Sort_Bubble - 	Simple but very slow algorithm,
								especially for larger arrays.
		Sort_Heap - 		Better worst case than quick
								sort. However, is often slower
								than quick sort in practice.
		Sort_Cocktail -	An improvement over bubble
								sort. However, still not as
								good as other algorithms.
		Sort_Dan -		My (Daniel White's) attempt at
								a sorting algorithm.
		Sort_RapidX - 	Optimal sorting for small arrays
								(implemented for X=2,3,4).
		
	Speeds (without -O3):
		Algorithm				10x10^7	100x10^6	1000x10^4	10^4x100
		Quick sort 			9s			13s				2s				0s
		c qsort					14s			18s				2s				1s
		Dan sort				8s			24s				17s				15s
		Heap sort				9s			27s				20s				18s
		Insert sort			11s			29s				22s				26s
		Bucket sort			11s			33s				25s				26s
		Cocktail sort			13s			58s				52s				54s
		Bubble sort			12s			84s				87s				95s
		
	Speeds (with -O3):
		Algorithm				10x10^7	100x10^6	1000x10^4	10^4x100
		Quick sort 			5s			8s				1s				0s
		c qsort					13s			18s				2s				0s
		Dan sort				5s			12s				5s				4s
		Insert sort			6s			13s				8s				8s
		Heap sort				7s			18s				11s				10s
		Bucket sort			6s			18s				12s				13s
		Cocktail sort			7s			22s				18s				17s
		Bubble sort			7s			34s				30s				30s
*/

/* Prototypes */
void Sort_Bucket(int *Array, int Offset, int Length);
void Sort_Dan(int *Array, int Offset, int Length);
void Sort_Quick(int *Array, int Offset, int Length);
void Sort_Bubble(int *Array, int Offset, int Length);
void Sort_Heap(int *Array, int Offset, int Length);
void Sort_Cocktail(int *Array, int Offset, int Length);
void Sort_Insert(int *Array, int Offset, int Length);
inline void Sort_Rapid2(int *Array, int Offset);
inline void Sort_Rapid3(int *Array, int Offset);
inline void Sort_Rapid4(int *Array, int Offset);
inline void Sort_Rapid5(int *Array, int Offset);

#endif